/**********************************************
* @file    	key-exti.c
* @author 	dralee
* @version	v1.0
* @date			2021-12-01
* @brief		KEY1、KEY2按键中断配置
***********************************************/
#include "key-exti.h"

/**
 *****************************************
 * @brief 配置按键嵌套控制器NVIC
 * @param 无
 * @retval 无
 *****************************************/
static void NVIC_Configuration(void)
{
	NVIC_InitTypeDef	NVIC_InitStruct;
	// NVIC优先级组1（1位抢占3位子优先）
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
		
	NVIC_InitStruct.NVIC_IRQChannel = KEY1_INT_EXTI_IRQ; 		// 配置中断源：按键1
	NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 1;	// 抢占优先级
	NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1;					// 子优先级
	NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;						// 使能中断通道	
	NVIC_Init(&NVIC_InitStruct);														// 初始化嵌套控制器
	
	NVIC_InitStruct.NVIC_IRQChannel = KEY2_INT_EXTI_IRQ;		// 中断源：按键2
	NVIC_Init(&NVIC_InitStruct);														// 初始化嵌套控制器
}

/**
 *********************************************
 * @brief 配置IO为EXIT中断口，并设置中断优先级
 * @param 无
 * @retval 无
 *********************************************/
void EXTI_Key_Config(void)
{
	GPIO_InitTypeDef	GPIO_InitStruct;
	EXTI_InitTypeDef	EXTI_InitStruct;
	
	RCC_APB2PeriphClockCmd(KEY1_INT_GPIO_CLK | KEY2_INT_GPIO_CLK, ENABLE); // 开启按键GPIO口时钟
	NVIC_Configuration();		// NVIC中断配置
	// KEY1配置
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;				// 浮空输入
	GPIO_InitStruct.GPIO_Pin = KEY1_INT_GPIO_PIN;							// 引脚
	GPIO_Init(KEY1_INT_GPIO_PORT, &GPIO_InitStruct);
	
	// 选择EXTI信号 源
	GPIO_EXTILineConfig(KEY1_INT_EXTI_PORTSOURCE, KEY1_INT_EXTI_PINSOURCE);
	EXTI_InitStruct.EXTI_Line = KEY1_INT_EXTI_LINE;
	EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt;		// 中断模式
	EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Rising;	// 上升沿中断
	EXTI_InitStruct.EXTI_LineCmd = ENABLE;							// 使能中断
	EXTI_Init(&EXTI_InitStruct);
	
	// KEY2配置
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;				// 浮空输入
	GPIO_InitStruct.GPIO_Pin = KEY2_INT_GPIO_PIN;							// 引脚
	GPIO_Init(KEY2_INT_GPIO_PORT, &GPIO_InitStruct);
	
	// 选择EXTI信号 源
	GPIO_EXTILineConfig(KEY2_INT_EXTI_PORTSOURCE, KEY2_INT_EXTI_PINSOURCE);
	EXTI_InitStruct.EXTI_Line = KEY2_INT_EXTI_LINE;
	EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt;			// 中断模式
	EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Falling;	// 下降沿中断
	EXTI_InitStruct.EXTI_LineCmd = ENABLE;								// 使能中断
	EXTI_Init(&EXTI_InitStruct);
	
}
